$(function () {
    //功能一: 全选 
    /* 
        需求:点击全选按钮,让所有的商品进行选中效果
    */

    // 当前为有input标签样式,操作比较麻烦 有BUG

    /*  $('.allSelect').click(function(){
         // alert(1)
         //获取当前span的兄弟input的状态值
         let status=$(this).siblings('input').prop('checked');
 
         //设置当前状态到其它商品中的input标签上
         $('.singleSelect').prop('checked',!status);
 
         //把另一个全选也进行选中
         $('.otherSelt').prop('checked',!status);
         console.log(status)
     }) */

    $('.allSelect').click(function () {
        // alert(1)
        //1.获取当前input标签的状态值
        let status = $(this).prop('checked');

        //2.把所有商品进行同步状态(选中)
        $('.singleSelect').prop('checked', status);

        //3.把另一个全选也进行同步状态
        $('.allSelect').prop('checked', status);

        allCount()
    })

    //功能二: 反选
    /* 
        思路:
            1.给singleSelect注册点击事件
            2.定义标杆状态  let flag=false
            3.动态获取到所有单个商品的状态值
                判定:
                    如果其中有一个没有选中,全选就不能选中
                    切换标杆状态  flag=!flag

            4.通过判定flag的状态来设置对应 全选按钮的状态
    */
    //批量给单个选项注册事件
    /*    $('.singleSelect').click(function(){
        //    alert(1)
            //定义标杆状态 (未选中)
            let flag=false;
    
            //获取 [所有单个商品] 的状态值()
            //let status=$('.singleSelect').prop('checked');//只能获取到第一个input标签的状态,不能使用
            
            //需要使用遍历 获取所有单个商品状态值
            $('.singleSelect').each(function(index,dom){
                //console.log(dom);//获取到是原生对象
               //console.log($(this));//jq对象
    
               //获取第一个单个商品input标签的状态值
               let status=$(this).prop('checked');
    
               //判定:  只要有一个为false 不选中全选 
               //status==false
               if(!status){
                 //切换
                 flag=true;
                 //一般只要有一个为false,后面的东西就可以不执行了 跳出操作
                 return;
               }
               //完整版
            //    if(status){
            //     //切换
            //     flag=false;
            //    }else{
            //     //切换
            //     flag=true;
            //    }
            })
    
            //判定  当flag 为true时, 表示单个商品至少有一件没有选中  不全选
            if(flag){
                //不全选
                $('.allSelect').prop('checked',false);
            }else{
                //全选
                $('.allSelect').prop('checked',true);
            }
       }) */

    //反选方式二:  
    /* 
     思路:
         主要使用选中前的个数和选中后的个数 来判定是否需要全选
    */

    $('.singleSelect').click(function () {
        //    alert(1)
        //1.获取选中前和选中后的个数
        //未选中时的个数
        let len = $('.singleSelect').length;
        //选中后的个数
        let seLen = $('.singleSelect:checked').length;

        //2.判定
        if (len == seLen) {
            //全选
            $('.allSelect').prop('checked', true);
        } else {
            //不进行全选
            $('.allSelect').prop('checked', false);
        }
        allCount()
    })


    // 添加
    $(".addNum").click(function () {
        $('.reduce').css({
            cursor:'',
            color:''
        })
        // 获取当前行数量的值
        let num = $(this).siblings(".txt").val();
        num++
        // 把增加的值添加到input框中
        $(this).siblings(".txt").val(num)
        //单个商品小计
        // $(this).closest('tr').find('.total').html((num * 41.00).toFixed(2)) 
        // 调用小计
        sTotal(this,num)
        allCount()
    })
    // 减少
    $(".reduce").click(function () {
        // 获取当前行数量的值
        let num = $(this).siblings(".txt").val();

            num--
            // 把增加的值添加到input框中
            if(num<1){
                $(this).css({
                    cursor:'not-allowed',
                    color:'#ccc'
                })
                return false
            }
            $(this).siblings(".txt").val(num)
            //单个商品小计
            // $(this).closest('tr').find('.total').html((num * 41.00).toFixed(2)) 
            // 调用小计
            sTotal(this,num)

            allCount()
    })

    function sTotal(obj,num){
        // 获取单件商品的价格
        let singlePrice = $(obj).closest('tr').find('.price').text()
        // 计算小计
        let singleTotal = singlePrice*num
        // 数据处理，保留小数点后两位
        singleTotal = singleTotal.toFixed(2)
        // 把数据添加到小计中
        $(obj).closest('tr').find('.total').text(singleTotal)
    }

    // 删除
    $('.del').click(function () {
        $(this).closest('tr').remove()
    })

    //定义计算总价和总数量的功能
        /* 
            步骤:
                1.定义变量保存 总价 和总数量
                2.获取已经选中商品 总数量 和总价格
                3.把获取的数据添加到指定位置
        */
    function allCount(){
        // 定义变量保存总价和总数量
        let allNum = 0  //总数量
        let allPrice = 0 //总价格

        $('.singleSelect:checked').each(function(){
            // 获取当前商品的数量
            let totalNum = parseInt($(this).closest('tr').find('.txt').val())
            // 商品总数
            allNum += totalNum

            // 获取当前商品的小计
            let sCount = parseFloat($(this).closest('tr').find('.total').text())
            // 总价
            allPrice += sCount
        })
        // 获取的数据添加到指定位置
        // 总数量
        $('.numAll').html(allNum)
        // 总价格
        allPrice = allPrice.toFixed(2)
        $('.priceAll').html(allPrice)
    }
})